package com.currency.admin;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.currency.common.base.BaseEntity;

import java.util.Collections;

/**
 * @author Lan
 * @date 2021/12/10
 */
public class CodeGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/currency?characterEncoding=UTF-8&useSSL=false&useUnicode=true&serverTimezone=UTC", "root", "root")
                .globalConfig(builder -> {
                    builder.author("Lan") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("D://workspace//idea-workspace//currency-demo//currency-admin//admin-api//src//main//java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com.currency") // 设置父包名
                            .moduleName("admin.pojo") // 设置父包模块名
                            .entity("entity")
                            .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://workspace//idea-workspace//currency-demo//currency-admin//admin-server//src//main//resources//mapper")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("sys_user","sys_dept", "sys_dict", "sys_dict_item", "sys_menu", "sys_oauth_client", "sys_permission", "sys_role", "sys_role_menu", "sys_role_permission", "sys_user_role") // 设置需要生成的表名
                            .addTablePrefix("_"); // 设置过滤表前缀
                })
                .strategyConfig(builder -> {  // 实体类设置
                    builder.entityBuilder()
                            .superClass(BaseEntity.class)  // 设置父类
                            .enableChainModel()  // 开启链式模型
                            .enableLombok()  //  开启 lombok 模型
                            .logicDeletePropertyName("deleted") // 设置逻辑删除字段
                            .enableTableFieldAnnotation()  // 开启生成实体时生成字段注解
                            .naming(NamingStrategy.underline_to_camel)
                            .columnNaming(NamingStrategy.underline_to_camel) // 设置数据库映射
                            .idType(IdType.AUTO); //设置主键
                })
                .strategyConfig(builder -> {  // 实体类设置enableRestStyle
                    builder.controllerBuilder()
                            .enableRestStyle();
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                .execute();
    }
}
